package com.example.spring.controller;

import com.example.spring.common.AuthAccess;
import com.example.spring.common.Result;
import com.example.spring.entity.User;
import com.example.spring.service.UserService;
import com.example.spring.utils.TokenUtils;
import cn.hutool.core.util.StrUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

/**
 * Web接口控制器
 * 提供登录、注册等基础功能的API接口
 */
@RestController
public class WebController {
    /**
     * 注入UserService，处理用户相关业务逻辑
     */
    @Autowired
    UserService userService;

    /**
     * 首页访问接口，无需身份验证
     * @return 成功的结果对象
     */
    @AuthAccess
    @GetMapping("/")
    public Result index(){
        return Result.success();
    }

    /**
     * 用户登录接口
     * 验证用户名和密码，成功后生成JWT令牌返回给前端
     * @param user 包含用户名和密码的用户对象
     * @return 成功则返回带有token的用户信息，失败则返回错误信息
     */
    @PostMapping("/login")
    public Result login(@RequestBody User user){
        // 判断输入参数的合法性
        if (StrUtil.isBlank(user.getUsername()) || StrUtil.isBlank(user.getPassword())){
            return Result.error("输入数据不正确");
        }

        User dbUser = userService.login(user);

        // 生成token，传递给前端
        String token = TokenUtils.genToken(dbUser.getId().toString(), dbUser.getPassword());
        dbUser.setToken(token);

        return Result.success(dbUser);
    }

    /**
     * 用户注册接口
     * 检查用户名是否已存在，创建新用户
     * @param user 包含注册信息的用户对象
     * @return 成功则返回用户信息，失败则返回错误信息
     */
    @PostMapping("/register")
    public Result register(@RequestBody User user){
        // 判断输入参数的合法性
        if (StrUtil.isBlank(user.getUsername()) || StrUtil.isBlank(user.getPassword())){
            return Result.error("输入数据不正确");
        }

        User dbUser = userService.register(user);

        return Result.success(dbUser);
    }
}
